此篇要介紹的是,XML對特定資料的另一種處理方式,就是忽略。
假設我使用XML來描述及記錄本系列文章第 4 篇以及其中所附的 XML 範例如下:
<?xml version="1.0"?>
<ironman2011>
<article>
<subject>[XML]04-資料交換格式</subject>
<date>2011-10-01</date>
<sampledata>
<?xml version="1.0"?>
<ipo:purchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ipo="http://www.altova.com/IPO" orderDate="2011-09-28" xsi:schemaLocation="http://www.altova.com/IPO ipo.xsd">
<shipTo xsi:type="ipo:US-Address">
<name>Helen Zoe</name>
<street>47 Eden Street</street>
<city>Cambridge</city>
<state>NY</state>
<zip>11111</zip>
</shipTo>
<billTo xsi:type="ipo:US-Address">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Old Town</city>
<state>AK</state>
<zip>95819</zip>
</billTo>
<Items>
<item partNum="811-AA">
<productName>Delicious Crab</productName>
<quantity>10</quantity>
<price>120.33</price>
<shipDate>2011-10-10</shipDate>
</item>
<item partNum="822-AA">
<productName>Funny Toys</productName>
<quantity>20</quantity>
<price>240.50</price>
<ipo:comment>Want this for the holidays!</ipo:comment>
<shipDate>2011-10-12</shipDate>
</item>
<item partNum="833-AA">
<productName>Lapis necklace</productName>
<quantity>30</quantity>
<price>128.99</price>
<ipo:comment>Go ahead. Make my day.</ipo:comment>
<shipDate>2011-10-15</shipDate>
</item>
</Items>
</ipo:purchaseOrder>
</sampledata>
</article>
</ironman2011>
這樣子的寫法是乍看沒什麼問題,但是一驗證就會出現錯誤,第一個錯誤是第7列的<?xml version=”1.0”?>,一份 XML 文件只能有一個這個宣告。第二個問題是從列 7 到列 45 ,是所謂的「資料」(只是剛好這資料也是 XML 的型式)而不是「欄位」(欄位只有一個,就是 sampledata)。
XML 提供了「忽略」的機制,簡單說就是將所指定的資料範圍當成純資料來看待,不管裡面有 < 或 > 也不管,就是看成 raw data 就對了。這在 XML 的規格中,稱之為 CDATA sections。
實作上的寫法很簡單,只要用 <![CDATA[ 開頭,]]> 結尾,中間涵蓋的所有資料,都會被忽略不處理,原味重現。
前面那個例子,加上<![CDATA[及]]>後如下
<?xml version="1.0"?>
<ironman2011>
<article>
<subject>[XML]04-資料交換格式</subject>
<date>2011-10-01</date>
<sampledata>
<![CDATA[
<?xml version="1.0"?>
<ipo:purchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ipo="http://www.altova.com/IPO" orderDate="2011-09-28" xsi:schemaLocation="http://www.altova.com/IPO ipo.xsd">
<shipTo xsi:type="ipo:US-Address">
<name>Helen Zoe</name>
<street>47 Eden Street</street>
<city>Cambridge</city>
<state>NY</state>
<zip>11111</zip>
</shipTo>
<billTo xsi:type="ipo:US-Address">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Old Town</city>
<state>AK</state>
<zip>95819</zip>
</billTo>
<Items>
<item partNum="811-AA">
<productName>Delicious Crab</productName>
<quantity>10</quantity>
<price>120.33</price>
<shipDate>2011-10-10</shipDate>
</item>
<item partNum="822-AA">
<productName>Funny Toys</productName>
<quantity>20</quantity>
<price>240.50</price>
<ipo:comment>Want this for the holidays!</ipo:comment>
<shipDate>2011-10-12</shipDate>
</item>
<item partNum="833-AA">
<productName>Lapis necklace</productName>
<quantity>30</quantity>
<price>128.99</price>
<ipo:comment>Go ahead. Make my day.</ipo:comment>
<shipDate>2011-10-15</shipDate>
</item>
</Items>
</ipo:purchaseOrder>
]]>
</sampledata>
</article>
</ironman2011>
可以看到在列 7 及列 47 ,加上了<![CDATA[及]]>,加入後在列 7 和列 47 之間的資料,就會被視為純資料處理。
本系列文章列表
Next : [XML]26-建置之Server端